package cn.edu.ecut.scheduling;

import java.time.LocalDateTime;

/**
 * 1、【前台线程】也称作非守护线程，通常创建并启动的线程都是 非守护线程
 * 2、【精灵线程】也称作守护线程，是相对于 前台线程(非守护线程) 而言的，它是一种"在后台运行"的线程
 * 3、创建线程之后，可以通过 Thread的实例方法 setDaemon将线程设置为 精灵线程，由精灵线程所创建的新线程默认也是 精灵线程
 * 4、【精灵线程】的主要作用是伴随着前台线程运行而存在，当所有的前台线程都退出时，精灵线程也会退出，最后JVM退出
 * 5、一个著名的精灵线程是 垃圾回收线程
 */
public class DemonThread implements Runnable {
	
	@Override
	public void run() {
		while( true ) {
			System.out.print( LocalDateTime.now() );
			System.out.print( " : " );
			System.out.println( Thread.currentThread() );
		}
	}

	public static void main(String[] args) throws InterruptedException {
		
		// 本质上 Runnable 实例只是用来描述线程所要完成的操作
		Runnable runnable = new DemonThread();
		
		Thread t = new Thread( runnable , "demon-thread" );
		t.setDaemon( true ); // true 表示 t 对应的线程是一个精灵线程
		t.start();
		
		Thread.sleep( 5000 );
		System.out.println( "main end." );
		
	}

}
